
# 分数
# class Fraction():
#     def __init__(self,n,d):
        # n 分子
        # self.n = n
        # d 分母
        # self.d = d

    # def __str__(self):
    #     return f'{self.n}/{self.d}'


    # 方式1
    # 将1个对象传递给另外一个对象
    # def add(self,other):              # self 和 other 都为对象变量  不过self不需要可以传入 而other一定要传入
        # self 和 other 两个分数按照公式进行运算
        #计算分子
        # n = self.n * other.d + self.d * other.n
        # 计算分母
        # d = self.d * other.d
        # 创建一个新的分数 返回
        # result = Fraction(n,d)   # 类之中的行为可以创建本身这个类
        # result.reduce()
        # return result

    # 方式2
    # 重载运算符 +
    # __add__
    # def __add__(self, other):
        # 计算分子
        # n = self.n * other.d + self.d * other.n
        # 计算分母
        # d = self.d * other.d
        # 创建一个新的分数 返回
        # result = Fraction(n, d)
        # result.reduce()
        # return result



    # 约分
    # def reduce(self):
        #辗转相除法
        # n = self.n
        # d = self.d
        # mod = n%d
        # while(mod>0):
        #     n = d
        #     d = mod
        #     mod = n % d
        # 求最大公约数
        # self.n = int(self.n/d)
        # self.d = int(self.d/d)


# f1 = Fraction(1,2)
# f2 = Fraction(1,4)
# print(f1)
# print(f2)

# f3 = f1.add(f2)        # 这是用方式1 将一个对象变量传递给另外一个对象
# print(f3)

# f3 = f1 + f2    # 这里是用方式2 运算符重载实现的 （如果在类中定义了 +号 的运算符重载 那么当你写出 +号 那么就会自动调用 +号 所重新定义的云运算规则）
# print(f3)


# 运算符重载
# +号 的功能
# 1.算数运算
# 2.字符串的连接
# 对象要能使用+号 需要进行运算重载

# 补充 其他运算符对应的重载魔法函数
# +    __add__
# -    __sub__
# *    __mul__
# /   __trudediv__
# //  __floordiv__
# %   __mod__
# **  __pow__


# 练习
# 1.完成分数的 相减 相乘 相除
# class Fraction():
#     def __init__(self,z,m):
#         self.z = z
#         self.m = m
#     def __str__(self):
#         return f'{self.z}/{self.m}'

    # def sub(self,other):
    #     z = self.z * other.m - self.m * other.z      # 定义新的分子
    #     m = self.m * other.m                         # 定义新的分母
    #     result = Fraction(z, m)
    #     result.reduce()
    #     return result
    #
    # def multiply(self,other):
    #     z =self.z * other.z
    #     m = self.m * other.m
    #     result = Fraction(z, m)
    #     result.reduce()
    #     return result
    #
    # def division(self,other):
    #     z = self.z * other.m
    #     m = self.m * other.z
    #     result = Fraction(z, m)
    #     result.reduce()
    #     return result
    #
    # def reduce(self):
        # 辗转相除法
        # z = self.z
        # m = self.m
        # mod = z % m
        # while (mod > 0):
        #     z = m
        #     m = mod
        #     mod = z % m
        # 求最大公约数
        # self.z = int(self.z / m)
        # self.m = int(self.m / m)
#
# f1 = Fraction(1,2)
# f2 = Fraction(1,6)
#
# f3 = f1.sub(f2)                    # 调用实现分数相减的行为
# print(f3)
#
# f3 = f1.multiply(f2)              # 调用实现分数相乘的行为
# print(f3)
#
# f3 = f1.division(f2)              # 调用实现分数相除的行为
# print(f3)




# 2.编写一个复数类 实现复数的加减乘除

class Complex_addition():
    def __init__(self,xubu,shibu):
        self.xubu = xubu
        self.shibu = shibu
    def add(self,other):
        xubu = self.xubu + other.xubu
        shibu = self.shibu + other.shibu
        result = Complex_addition(xubu,shibu)
        return result
    def __str__(self):
        return str(self.xubu) + '+' + str(self.shibu)  + str('i')

c1 = Complex_addition(1,2)
c2 = Complex_addition(2,6)
c3 = c1.add(c2)
print(c3)

